package com.flyco.modules.pms.mapper;

import java.util.List;

import com.baomidou.mybatisplus.annotation.SqlParser;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.flyco.modules.pms.model.ProductUnitSpec;
import com.flyco.modules.pms.vo.PmsProductExportVO;
import org.apache.ibatis.annotations.Param;
import com.flyco.modules.pms.entity.PmsProduct;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;

/**
 * @Description: 商品信息
 * @Author: flyco
 * @Date: 2019-11-19
 * @Version: V1.0
 */
@Repository
public interface PmsProductMapper extends BaseMapper<PmsProduct> {

    /**
     * 查询被逻辑删除的商品
     */
    List<PmsProduct> selectLogicDeleted(@Param(Constants.WRAPPER) Wrapper<PmsProduct> wrapper);

    /**
     * 还原被逻辑删除的商品
     */
    int revertLogicDeleted(@Param("productIds") String productIds, @Param("entity") PmsProduct entity);

    @SqlParser(filter = true)
    List<PmsProduct> getProductPage(Page<PmsProduct> page, @Param(Constants.WRAPPER) Wrapper<PmsProduct> wrapper, @Param("partnerId") Long partnerId);

    @SqlParser(filter = true)
    List<PmsProduct> getProductPageByStoreId(Page<PmsProduct> page, @Param(Constants.WRAPPER) Wrapper<PmsProduct> wrapper, @Param("storeId") String storeId);

    @SqlParser(filter = true)
    List<PmsProduct> getProductPageByChannelId(Page<PmsProduct> page, @Param(Constants.WRAPPER) Wrapper<PmsProduct> wrapper, @Param("channelId") String channelId);


    @SqlParser(filter = true)
    List<PmsProduct> getProductListWithOutPartner(@Param("ids") List<Long> ids);


    List<PmsProductExportVO> getProductExportList(@Param("ids") List<Long> ids, @Param("storeIds") List<String> storeIds);

    List<PmsProduct> getProductList(PmsProduct pmsProduct, @Param("startIndex") Integer startIndex, @Param("endIndex") Integer endIndex);

    Integer getProductCount(@Param("pmsProduct") PmsProduct pmsProduct);

    @SqlParser(filter = true)
    List<ProductUnitSpec> getProductUnitSpec();

    @SqlParser(filter = true)
    List<PmsProduct> getNeedInsertProduct();

    @SqlParser(filter = true)
    void InsertProduct(@Param("pmsProduct") PmsProduct productList);

    @SqlParser(filter = true)
    List<PmsProduct> getAllProduct();

    @SqlParser(filter = true)
    void updateProductSpec(@Param("id") Long id, @Param("spec") String spec);

    @SqlParser(filter = true)
    void autoUpdateProduct();

    List<PmsProduct> getJdProductBase();
}
